Soru & Cevap

TCP Server Socket(c# server ,Android Client)

12.09.2014 - 11:03

Merhaba arkadaşlar .Server socket ile uğraşan arkadaşlar varsa bir sorum olacak . öncelikle c# kısmında bir server oluşturdum .Daha sonra androidde servis in içerisinde bir client oluşturdum ve bunları birbirleri ile haberleştirmem gerekiyor. server açıyorum . sonra client başlatıyorum . ve bağlantı sağlıyorum bağlantı da başarılı oluyor . Fakat clentten bir veri gönderemiyorum yani aslında veri gidiyor fakat c# kısmındaki uygulamaya veri gelmiyor yada almıyor . Bu kıonu ile uğraşan varsa hardımcı olursa sevinirim . İlgilenen olursa hatanın olduğunu düşündüğüm kısmın kodlarını gönderebilirim . Şimdiden Teşekkürler...

341 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user
Konuk (doğrulanmamış)
30.04.2020 - 03:55
s=new Socket("192.168.1.35",6060);
            pw=new PrintWriter(Start.MainSoket.getOutputStream());
            pw.write(Str);
            pw.flush();
            pw.close();
            s.close();

Android tarafında  düzeltme var ben denemeler yapmak için kodu kaldırmıştım deneyen arkadaşlar bu kodu yazmayı unutmasın

 

Profile picture for user
Konuk (doğrulanmamış)
30.04.2020 - 03:30

 

 

public static  class General
    {
        public static void SunucuyuBaslat()
        {

        Stopwatch sw = new Stopwatch();
        sw.Start();
        ServerTCP.InitalizeNetWork();
           
            sw.Stop();
        }
    }

Tabi kodu çalıştırmayı unuttum  sunucuyu başlatmak için bir butonun click yordamında General.SunucuyuBaslat(); yazman gerekiyor

 

 

Profile picture for user
Konuk (doğrulanmamış)
30.04.2020 - 03:24

Android tarafı için yeni bir class oluştur DataSender adında alttaki kodu yaz
 


import android.os.AsyncTask;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class DataSender extends AsyncTask<String,Void,Void> {



DataOutputStream dos;
PrintWriter pw;
    Socket s;

    @Override
    protected Void doInBackground(String... voids) {

        String Str=voids[0];
        try {

            pw=new PrintWriter(s.getOutputStream());
            pw.write(Str);
            pw.flush();
pw.close();
s.close();


        }
        catch (IOException ex)
        {
ex.printStackTrace();

        }
        return null;
    }
}

 

Kodu çağırmak için MainActivity kısmında buton click  yöntemine bu kodu yaz

public  void Gonder(View v)
    {
        DataSender ds=new DataSender();



                ds.execute("gönderilecek bilgi");

    }

C# kısmında 

 class ServerTCP
    {
        static TcpListener sevrevSoket = new TcpListener(IPAddress.Any, 6060);

        public static void InitalizeNetWork()
        {
           
            sevrevSoket.Start();
            sevrevSoket.BeginAcceptSocket(new AsyncCallback(OnClientConnect), null);
        
        }

        private static void OnClientConnect(IAsyncResult result)
        {
            TcpClient client = sevrevSoket.EndAcceptTcpClient(result);
            sevrevSoket.BeginAcceptSocket(new AsyncCallback(OnClientConnect), null);
            ClientManeger.CreateConnection(client);
        
        
        }
    }
static  class ClientManeger
    {
      public static void CreateConnection(TcpClient tempClient)
      {

           
          Client newClient = new Client();
          newClient.soket = tempClient;
          newClient.ConnectionID = ((IPEndPoint)tempClient.Client.RemoteEndPoint).Port;

          newClient.Start();

         
            
        }

     
    
}
class Client
    {
        public int ConnectionID;
        public TcpClient soket;
        public NetworkStream stream;
        private byte[] recBuffer;
        public ByteBuffer buffer;
      

        public void Start()
        {
            soket.SendBufferSize = 4096;
            soket.ReceiveBufferSize = 4096;
            stream = soket.GetStream();
            recBuffer = new byte[4096];
            stream.BeginRead(recBuffer, 0, soket.ReceiveBufferSize, Onrecivedata, null);

        }

        private void Onrecivedata(IAsyncResult result)
        {

            try
            {
                

                int lengt = stream.EndRead(result);

                if (lengt <= 0)
                {
                    CloseConnection();
                    return;
                }

                byte[] newbytes = new byte[lengt];



                Array.Copy(recBuffer, newbytes, lengt);

                string str = Encoding.UTF8.GetString(recBuffer);

MessageBox.Show(str);
               

                stream.BeginRead(recBuffer, 0, soket.ReceiveBufferSize, Onrecivedata, null);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                CloseConnection();
                
            }
        }

        private void CloseConnection()
        {
            Sabitler.CikisEkle(ConnectionID);

            SqlManagement sql = new SqlManagement();
           sql.DeleteOnline(ConnectionID);
            soket.Close();
        }
    }

bende çalışmıştı bu kodlar eksik bişey yazmadıysam bu şekilde çalışıyor

picture-12990-1391515426.gif
misterbaykal
15.09.2014 - 09:29

Merhaba,

C# ile uğraşmadım o yüzden sorunun o kısmına cevap veremeyeceğim malesef. Fakat TCP socket ile yaklaşık 1 senedir uğraşıyorum. Benim kullandığım framewrok Apache Mina. Client-Server uygulamalarında oldukça yeterli bir framework. Fakat Java. Yani C#/server kısmında kullanamayabilirsin. Eğer C# kullanmak zorunda değilsin, Apache Mina'ya bir bak derim. Kendi sitesinde yeterince bilgi mevcut. Ayrıca sorun olursa yardımcı olurum.

Kolay gelsin